/**
 * API 数据类型定义
 * 对应后端 API 返回的数据结构
 */

/**
 * Space API 响应类型
 */
export interface SpaceDto {
  id: number;
  name: string;
  icon: string;
  icon_color: string;
  position: number;
  owner_id: number;
  created_at: string;
  updated_at: string;
}

/**
 * Collection API 响应类型
 */
export interface CollectionDto {
  id: number;
  name: string;
  owner_id: number;
  created_at: string;
  updated_at: string;
}

/**
 * Space-Collection Binding (空间集合关联)
 */
export interface SpaceCollectionBindingDto {
  space_id: number;
  collection_id: number;
  position: number;
  owner_id: number;
  created_at: string;
  updated_at: string;
}

/**
 * Collection 完整数据（包含 binding 信息）
 */
export interface CollectionWithBindingDto {
  collection: CollectionDto;
  binding: SpaceCollectionBindingDto;
}

/**
 * Collection 完整数据（包含 binding 信息和标签页列表）
 * 对应 GET /spaces/{space_id}/collections 接口的聚合响应
 */
export interface CollectionWithTabsDto {
  collection: CollectionDto;
  binding: SpaceCollectionBindingDto;
  items: TabDto[];
}

/**
 * Tab API 响应类型
 */
export interface TabDto {
  id: number;
  collection_id: number;
  url: string;
  title: string;
  favicon?: string;
  domain: string;
  position: number;
  is_pin: boolean;
  owner_id: number;
  created_at: string;
  updated_at: string;
}

/**
 * 批量查询标签页的响应类型
 */
export interface TabsByCollectionDto {
  collection_id: number;
  tabs: TabDto[];
}

/**
 * 创建 Space 请求参数
 */
export interface CreateSpaceRequest {
  name: string;
  icon: string;
  icon_color: string;
  position?: number;
}

/**
 * 更新 Space 请求参数
 */
export interface UpdateSpaceRequest {
  name?: string;
  icon?: string;
  icon_color?: string;
  position?: number;
}

/**
 * 创建 Collection 请求参数
 */
export interface CreateCollectionRequest {
  name: string;
  space_id?: number;
  position?: number;
}

/**
 * 更新 Collection 请求参数
 */
export interface UpdateCollectionRequest {
  name?: string;
}

/**
 * 关联集合到空间请求参数
 */
export interface AttachCollectionRequest {
  collection_id: number;
  target_space_id: number;
  position?: number;
}

/**
 * 创建 Tab 请求参数
 */
export interface CreateTabRequest {
  collection_id: number;
  url: string;
  title: string;
  favicon?: string;
  is_pin?: boolean;
  position?: number;
}

/**
 * 更新 Tab 请求参数
 */
export interface UpdateTabRequest {
  title?: string;
  url?: string;
  favicon?: string;
  is_pin?: boolean;
  position?: number;
  collection_id?: number;
}

/**
 * 重排序 Collection 请求参数
 */
export interface ReorderCollectionsRequest {
  items: ReorderCollectionItem[];
}

export interface ReorderCollectionItem {
  collection_id: number;
  position: number;
}

/**
 * 重排序 Tab 请求参数（支持跨集合移动）
 */
export interface ReorderTabsRequest {
  items: ReorderTabItem[];
}

export interface ReorderTabItem {
  item_id: number;
  from_collection_id: number;
  to_collection_id: number;
  position: number;
}

/**
 * 重排序 Space 请求参数
 */
export interface ReorderSpacesRequest {
  items: ReorderSpaceItem[];
}

export interface ReorderSpaceItem {
  space_id: number;
  position: number;
}

/**
 * 批量查询标签页请求参数
 */
export interface ListTabsByCollectionsRequest {
  space_id: number;
  collection_ids: number[];
}

/**
 * 批量采集标签页请求参数
 */
export interface CaptureTabsRequest {
  space_id: number;
  collection_name: string;
  collection_position?: number;
  tabs: CaptureTabItem[];
}

export interface CaptureTabItem {
  url: string;
  title: string;
  favicon?: string;
  is_pin?: boolean;
}

/**
 * 批量采集标签页响应类型
 */
export interface CaptureTabsResponse {
  collection: {
    id: number;
    name: string;
    space_id: number;
    position: number;
    owner_id: number;
    created_at: string;
    updated_at: string;
  };
  tabs: TabDto[];
}

/**
 * 删除操作响应类型
 */
export interface DeleteResponse {
  deleted: boolean;
}

/**
 * 重排序操作响应类型
 */
export interface ReorderResponse {
  reordered: boolean;
}
